package web.suzy.oj.validator;

import cn.hutool.core.util.StrUtil;
import org.springframework.stereotype.Component;
import web.suzy.oj.common.exception.StatusFailException;
import web.suzy.oj.pojo.entity.problem.Problem;

/**
 * YangSuzy 软件工作室
 * 类名: ProblemValidator
 * 描述: 题目信息验证器
 * 功能: 校验题目信息内容是否符合要求
 *
 * @author YangSuzy
 * Date: 2022/11/22 15:44
 */
@Component
public class ProblemValidator {

    /**
     * 方法名: validateProblem
     * 描述: 校验题目信息
     *
     * @param problem 题目信息
     * @return void
     * @date 2022/11/22 15:46
     * @auther YangSuzy
     **/
    public void validateProblem(Problem problem) throws StatusFailException {
        if (StrUtil.isBlank(problem.getProblemId())) {
            throw new StatusFailException("题目的展示ID不能为空！");
        }
        if (problem.getTimeLimit() <= 0) {
            throw new StatusFailException("题目的时间限制不能小于等于0！");
        }
        if (problem.getMemoryLimit() <= 0) {
            throw new StatusFailException("题目的内存限制不能小于等于0！");
        }
        if (problem.getStackLimit() <= 0) {
            throw new StatusFailException("题目的栈限制不能小于等于0！");
        }
    }

    /**
     * 方法名: validateProblemUpdate
     * 描述: 校验题目信息更新内容
     *
     * @param problem 更新后的题目
     * @return void
     * @date 2022/11/22 15:47
     * @auther YangSuzy
     **/
    public void validateProblemUpdate(Problem problem) throws StatusFailException {
        if (problem.getId() == null) {
            throw new StatusFailException("题目的id不能为空！");
        }
        validateProblem(problem);
    }
}
